/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package formularze;

import bazy.HibernateUtil;
import bazy.Zalaczniki;
import bazy.Zamowienia;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.ConfigurableNavigationHandler;
import javax.faces.context.FacesContext;
import javax.faces.event.ComponentSystemEvent;
import javax.servlet.http.HttpServletRequest;
import logowanie.LogBean;
import org.hibernate.Session;

/**
 * Komponent zarządzający do obsługi zgłoszenia awarii.
 * @author Grzesiek
 */
@Named(value = "zgl_awBean")
@SessionScoped
public class Zgl_awBean implements Serializable {

    FacesContext context = FacesContext.getCurrentInstance();
    LogBean bean = (LogBean) context.getApplication().evaluateExpressionGet(context, "#{logBean}", LogBean.class);
    private String nazwa;
    private String typ;
    private String opis;
    private String numer;
    private boolean gwarancja;
    private String nr_gwaracnji;
    private String zrodlo;
    private String nr_zlec;
    private String komentarz;
    private int id_zam = 0;
    private String uwagi;
    private Session session;
    private ArrayList<Zalaczniki> zalacznikiList = new ArrayList<Zalaczniki>();
    private boolean nowy = true;
    private Zgl_aw za = null;

    public int getId_zam() {
        return id_zam;
    }

    public void setId_zam(int id_zam) {
        this.id_zam = id_zam;
    }

    public String getUwagi() {
        return uwagi;
    }

    public void setUwagi(String uwagi) {
        this.uwagi = uwagi;
    }

    public ArrayList<Zalaczniki> getZalacznikiList() {
        return zalacznikiList;
    }

    public void setZalacznikiList(ArrayList<Zalaczniki> zalacznikiList) {
        this.zalacznikiList = zalacznikiList;
    }

    public boolean saZalaczniki() {
        if (zalacznikiList.isEmpty()) {
            return false;
        } else {
            return true;
        }
    }

    public String getNumer() {
        return numer;
    }

    public String getNr_zlec() {
        return nr_zlec;
    }

    public void setNr_zlec(String nr_zlec) {
        this.nr_zlec = nr_zlec;
    }

    public void setNumer(String numer) {
        this.numer = numer;
    }

    public boolean isGwarancja() {
        return gwarancja;
    }

    public boolean isNowy() {
        return nowy;
    }

    public void setNowy(boolean nowy) {
        this.nowy = nowy;
    }

    public void setGwarancja(boolean gwarancja) {
        this.gwarancja = gwarancja;
    }

    public String getKomentarz() {
        return komentarz;
    }

    public void setKomentarz(String komentarz) {
        this.komentarz = komentarz;
    }

    public String getNazwa() {
        return nazwa;
    }

    public void setNazwa(String nazwa) {
        this.nazwa = nazwa;
    }

    public String getNr_gwaracnji() {
        return nr_gwaracnji;
    }

    public void setNr_gwaracnji(String nr_gwaracnji) {
        this.nr_gwaracnji = nr_gwaracnji;
    }

    public String getOpis() {
        return opis;
    }

    public void setOpis(String opis) {
        this.opis = opis;
    }

    public String getTyp() {
        return typ;
    }

    public void setTyp(String typ) {
        this.typ = typ;
    }

    public String getZrodlo() {
        return zrodlo;
    }

    public void setZrodlo(String zrodlo) {
        this.zrodlo = zrodlo;
    }

    /**
     * Usniecie zalącznika
     * Usuwamy także z bazy, jeśli został już tam dodany.
     * @param zal
     */
    public void usun_zalacznik(Zalaczniki zal) {
        if (zal.getIdzalaczniki() != null) {
            za.usun_zalacznik(zal);
        }
        zalacznikiList.remove(zal);
    }

    /**
     * Dodanie nowego pola na załącznik.
     */
    public void dodaj_zalacznik() {
        zalacznikiList.add(new Zalaczniki(null, "", "", "", false, null));

    }

    /** Creates a new instance of Zgl_awBean */
    public Zgl_awBean() {
        za = new Zgl_aw();
    }

    /**
     * Inicjalizacja formularza
     * @param event
     */
    public void inicjalizuj(ComponentSystemEvent event) {
        if (bean == null) {
            context = FacesContext.getCurrentInstance();
            ConfigurableNavigationHandler handler = (ConfigurableNavigationHandler) context.getApplication().getNavigationHandler();
            handler.performNavigation("brak_dostepu");
        }
                boolean isGET = ((HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest()).getMethod().equals("GET") ? true : false;
        if (isGET) {
        if (id_zam == 0) {
            wyczysc_dane();
        } else {
            session = HibernateUtil.getSessionFactory().openSession();
            Zamowienia zam = (Zamowienia) session.load(Zamowienia.class, id_zam);
            if ((nowy && zam.getStatusy().getIdstatusy() != 1) || (!zam.getUzytkownicy().getLogin().equals(bean.getLogin()) && bean.getUprawnienia().equals("petent"))) {
                context = FacesContext.getCurrentInstance();
                ConfigurableNavigationHandler handler = (ConfigurableNavigationHandler) context.getApplication().getNavigationHandler();
                handler.performNavigation("brak_dostepu");
            }
            uzupelnij_dane(zam);
        }

 }
    }

    /**
     * Uzupenienie formularza z danych przechowywanych w bazie.
     * @param zam
     */
    public void uzupelnij_dane(Zamowienia zam) {
        this.komentarz = zam.getKomentarz();
        this.uwagi = zam.getUwagidorealizacji();
        this.zrodlo = zam.getZrodlofinansowania();
        if (!zrodlo.equals("dydaktyka")) {
            nr_zlec = zrodlo;
            zrodlo = "nr_zlecenia";
        }
        this.opis = zam.getZgloszeniaAwariis().iterator().next().getOpisUsterki();
        this.nazwa = zam.getZgloszeniaAwariis().iterator().next().getNazwa();
        this.numer = zam.getZgloszeniaAwariis().iterator().next().getNumerInwentarzowy();
        this.typ = zam.getZgloszeniaAwariis().iterator().next().getTyp();
        this.nr_gwaracnji = zam.getZgloszeniaAwariis().iterator().next().getNumerGwarancji();
        this.gwarancja = zam.getZgloszeniaAwariis().iterator().next().getNaprawaGwarancyjna();
        zalacznikiList.clear();
        Iterator<Zalaczniki> zalacz_iter = zam.getZalacznikis().iterator();
        while (zalacz_iter.hasNext()) {
            zalacznikiList.add(zalacz_iter.next());

        }
        session.close();
    }

    /**
     * Wyczyszczenie danych z formularza
     */
    public void wyczysc_dane() {
        this.komentarz = "";
        this.uwagi = "";
        this.zrodlo = "dydaktyka";
        this.nr_zlec = "";
        this.id_zam = 0;
        this.opis = "";
        this.nazwa = "";
        this.numer = "";
        this.typ = "";
        this.nr_gwaracnji = "";
        this.gwarancja = false;
        zalacznikiList.clear();
        zalacznikiList.add(new Zalaczniki(null, "", "", "", false, null));
    }

    /**
     * Zapisanie formularza do bazy
     * @return przekierowanie na strone informującą o powodzeniu
     */
    public String zapisz_zam() {
        if (!zrodlo.equals("dydaktyka")) {
            zrodlo = nr_zlec;
        }
        za.dodaj(id_zam, bean.getId_uz(), komentarz, zrodlo, uwagi, nazwa, typ, numer, opis, nr_gwaracnji, gwarancja, zalacznikiList);
        return "success";
    }
}
